package bean;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import bean.remote.MQDepositoRemote;
import bean.remote.SolicitudFabricaRemote;
import dominio.ArticuloItemCompra;
import dominio.SolicitudCompra;

@Stateless(name = "solicitudFabricaBean")
@Remote(SolicitudFabricaRemote.class)
public class SolicitudFabricaBean implements SolicitudFabricaRemote {

	@PersistenceContext(unitName = "fabricaDS")
	private EntityManager entityManager;

	@EJB(beanName = "mqDepositoBean")
	private MQDepositoRemote mqDepositoRemote;

	@Override
	public void fabricar(SolicitudCompra solicitudFabrica) {
		List<ArticuloItemCompra> articulosItems = solicitudFabrica
				.getArticulosItemsCompra();
		for (ArticuloItemCompra articuloItem : articulosItems) {
			articuloItem.fabricar();
		}
		solicitudFabrica.entregar();
		entityManager.merge(solicitudFabrica);
		try {
			mqDepositoRemote.send(solicitudFabrica.toXML());
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void guardar(SolicitudCompra solicitudFabrica) {
		entityManager.persist(solicitudFabrica);
	}

	@Override
	public List<SolicitudCompra> findAll() {
		return entityManager.createQuery("from SolicitudCompra sc",
				SolicitudCompra.class).getResultList();
	}

	@Override
	public SolicitudCompra findByCodigo(Long codigo) {
		return entityManager.find(SolicitudCompra.class, codigo);
	}
}
